<?php
/**
 * Сюда вынесены операции для подключения скриптов. Основная причина - необходимость вызова метода useClass 
 * вне класса SiteRequestHandler. Это удобно для написания юнит-тестов.
 * 
 * @package default
 * @author Alexander Sibiryakov
 **/
class RL_UseScript {
	public function useClass( $name, $ext = 'php' )
	/**
	 * Подключить класс
	 *
	 * @param string $name
	 * @param int $level
	 * @param int $dr
	 * @param string $ext
	 */
	{
		global $FU;
		
		return $this->useScript($FU->dir->lib , str_replace('_', '/',$name) , $ext);
	}
	public function useLib( $library_name, $file_name = "" )
	/**
	 * Подключить библиотеку
	 *
	 * @param string $library_name имя библиотеки
	 * @param string $file_name название файла, если оно отличается от названия библиотеки
	 */
	{
		// usually library have one file to link itself
		if ($file_name == "") {
			$file_name = $library_name; 
		}

		global $FU;
		$this->useScript($FU->dir->lib, $library_name."/".$file_name, 'php');
	}
	public function findScript( $type, $name, $ext = 'php' )
	/**
	 * Ищет скрипт по уровням проектов.
	 *
	 * @param string $type папка, где лежит скрипт
	 * @param string $name имя файла
	 * @param string $ext расширение файла
	 * @return string имя файла, либо false
	 */
	{
		$fname = $type . $name . '.' . $ext;
		if(@file_exists($fname)) {
			return $fname;
		}
		//ничего не нашли
		return false;
	}
	public function findScript_( $type, $name, $ext = 'php' )
	/**
	 * Тоже, что и findScript(), но в случае не обнаружения файла вываливается с ошибкой
	 *
	 * @param string $type папка, где лежит скрипт
	 * @param string $name имя файла
	 * @param string $ext расширение файла
	 * @return string имя файла, либо false
	 */
	{
		$fname = $this->findScript($type,$name,$ext);
		if($fname) {
			return $fname;
		} else {
			$error = "FindScript: <b>not found</b>, type=<b>$type</b>, name=<b>$name</b>, ext=<b>$ext</b>, fname=<b>$fname</b>";
			if( $this->debug ) {
				$this->debug->Error($error);
			} else {
				die($error);
			}
		}
	}
	private function useScript( $type, $name, $ext = 'php' )
	/**
	 * Тоже, что и findScript_(), но кроме того инклюдим найденный скрипт
	 *
	 * @param string $type папка, где лежит скрипт
	 * @param string $name имя файла
	 * @param int $level с какого уровня начинать поиск
	 * @param int $dr направление поиска, возможные значения : -1,0,+1
	 * @param string $ext расширение файла
	 * @return bool
	 */
	{
		return $this->_useScript( $this->findScript_($type,$name,$ext) );
	}
	private function _useScript($source)
	/**
	 * Грузит скрипт в контексте меня
	 *
	 * @param string $source имя файла
	 * @return void
	 */
	{
		if($source && is_file($source)) {
			include_once( $source );
			return true;
		} else {
			return false;
		}
	}

}
